package com.glr.question.controller;

import com.glr.common.contants.CodeEnum;
import com.glr.common.utils.ResultUtils;
import com.glr.question.entity.Option;
import com.glr.question.service.OptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

/**
 * 试题选项控制层
 *
 * @author GLoRy
 * @date 2021/6/11 0:49
 */
@RestController
@RequestMapping("/option")
public class OptionController {

    @Autowired
    private OptionService optionService;

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 添加试题选项信息
     *
     * @param option 试题选项实体
     * @return 添加结果
     */
    @PostMapping("/save")
    public ResultUtils save(@RequestBody Option option) {
        optionService.save(option);
        return new ResultUtils(true, CodeEnum.SUCCEED, "添加试题选项信息成功");
    }

    /**
     * 根据id修改试题选项信息
     *
     * @param option 试题选项实体
     * @param id     试题选项id
     * @return 修改结果
     */
    @PutMapping("/update/{id}")
    public ResultUtils update(@RequestBody Option option, @PathVariable String id) {
        option.setOptionId(Integer.valueOf(id));
        optionService.update(option);
        return new ResultUtils(true, CodeEnum.SUCCEED, "修改试题选项信息成功");
    }

    /**
     * 根据id删除试题选项信息
     *
     * @param id 试题选项id
     * @return 删除信息
     */
    @DeleteMapping("/delete/{id}")
    public ResultUtils delete(@PathVariable String id) {
        optionService.delete(Integer.valueOf(id));
        return new ResultUtils(true, CodeEnum.SUCCEED, "修改试题选项信息成功");
    }

    /**
     * 根据id查询试题选项信息
     *
     * @param id 试题选项id
     * @return 根据id查询的课程结果
     */
    @GetMapping("/findById/{id}")
    public ResultUtils findById(@PathVariable String id) {
        String option = redisTemplate.opsForValue().get("option::" + id);
        if (option != null) {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", option);
        } else {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", optionService.findById(Integer.valueOf(id)));
        }
    }

    /**
     * 查询所有试题选项信息
     *
     * @return 查询试题选项信息的结果
     */
    @GetMapping("/findAll")
    public ResultUtils findAll() {
        String optionList = redisTemplate.opsForValue().get("option::findAll");
        if (optionList != null) {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", optionList);
        } else {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", optionService.findAll());
        }
    }

    /**
     * 分页查询所有试题选项信息
     *
     * @param page     当前页
     * @param pageSize 每页条数
     * @return 分页查询试题选项的信息的结果
     */
    @GetMapping("/findByPage/{page}/{pageSize}")
    public ResultUtils findByPage(@PathVariable String page, @PathVariable String pageSize) {
        String optionPage = redisTemplate.opsForValue().get("option::findByPage");
        if (optionPage != null) {
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", optionPage);
        } else {
            Page<Option> options = optionService.findByPage(Integer.valueOf(page), Integer.valueOf(pageSize));
            return new ResultUtils(true, CodeEnum.SUCCEED, "查询试题选项信息成功", options.getContent());
        }
    }
}
